package com.laiqilin.service.impl;

import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.laiqilin.common.util.PageResult;
import com.laiqilin.entity.Goods;
import com.laiqilin.mapper.GoodsMapper;
import com.laiqilin.service.IGoodsService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.laiqilin.service.IShelfService;
import com.laiqilin.vo.GoodsVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements IGoodsService {

	@Autowired
	private IShelfService shelfService; // 依赖注入 Shelf 服务层

	// 分页查询 (不带条件)
	@Override
	public PageResult<Goods> findByPage(Integer page, Integer pageSize) {
		Page<Goods> pageResult = this.page(new Page<>(page, pageSize));
		return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
	}

	@Override
	public boolean save(Goods goods) {
		return false;
	}

	// 分页查询（带条件）
	@Override
	public PageResult<Goods> search(Integer page, Integer pageSize, GoodsVO vo) {
		// 封装查询条件
		QueryWrapper<Goods> wrapper = new QueryWrapper<>();
		wrapper.like(StrUtil.isNotBlank(vo.getProductName()), "product_name", vo.getProductName());
		wrapper.like(StrUtil.isNotBlank(vo.getDescription()), "description", vo.getDescription());
		wrapper.eq(false, "shelf_id", vo.getShelfId());
		wrapper.ge(vo.getPrice() != null, "price", vo.getPrice());  // 查询价格大于等于指定值
		wrapper.le(vo.getStock() != null, "stock", vo.getStock());  // 查询库存小于等于指定值

		// 根据 wrapper 包装好的条件进行分页查询
		Page<Goods> pageResult = this.page(new Page<>(page, pageSize), wrapper);

		// 设置货物对应的货架名称（通过 shelfId 获取货架信息）
		pageResult.getRecords().forEach(goods -> {
			if (goods.getShelfId() != null) {
				// 获取货架信息并设置货物的 shelfName
				String shelfName = shelfService.getById(goods.getShelfId()).getShelfName();
				goods.setDescription(shelfName); // 在 description 中设置货架名称（可以根据需要自定义）
			}
		});

		return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
	}

}
